<?php
/**
 * 开发背景说明：本人长期开发帝国小插件，免不了再引用一堆配制文件，为人提高效率，后来就有这个
 * 自动加载类文件 支持php5.6版
 * cighsen02 365182575
 * Time: 2021.08.01
 * update 2022.09.12
 */


 /**
  * 定义加载目录，增加好后，再尾部set_include_path() 相应增加你的目录
  */
define('TWOIR', __DIR__ . DIRECTORY_SEPARATOR . 'class');

/**
 * 自加载类文件 class_exists('类名') or include('类库绝对路径')
 */
class Loader
{
	public static function autoload($class)
	{
        //不同操作系统 '/' 不一致问题
		if(false !== stristr(PHP_OS, 'LINUX')) $class = str_replace("\\", DIRECTORY_SEPARATOR, $class);

		$pluginname = strstr($class, DIRECTORY_SEPARATOR, true);
		if(false === $pluginname) throw new \Exception('请用命名空间实现自动加载', 9401);

		$pluginname = strtoupper($pluginname);
		if(!defined($pluginname)) throw new \Exception('插件' . $name . '不存在', 9401);

		//加载类文件
		include constant($pluginname) . strstr($class, DIRECTORY_SEPARATOR) . '.php';
	}
}

/**
 * 加载配件文件
 *
 * 例：Config::插件名称(变量名)
 */
class Config
{
	private $path;

	private function includeFile($parameter)
	{
		$file = $this->path . DIRECTORY_SEPARATOR . $parameter . '.php';

		//文件是否存在
		if(!file_exists($file))	throw new \Exception('配制' . $parameter . '.php文件不存在', 9401);

		$data = require $file;

		return $data ? $data : [];
	}

	private function getConfig($parameters)
	{
		$key = is_array($parameters) && 1 === count($parameters) ? $parameters[0] : $parameters;

		//如果字符串强转数组
		if(is_string($parameters)) $parameters = (array)$parameters;

		$parameters = array_flip($parameters);

		array_walk($parameters, function(&$parameter, $key) {

			$parameter = $this->includeFile($key);
		});

		return 1 === count($parameters) ? $parameters[$key] : $parameters;
	}

	public static function __callStatic($name, $parameters)
	{
		$definename = strtoupper($name);

		//判断插件是否存在
		if(!defined($definename)) throw new \Exception('插件' . $name . '不存在', 9401);

		if(!isset($parameters) || empty($parameters)) throw new \Exception('参数不能为空', 9401);

		$new        = new static;
		$new->path  = dirname(constant($definename)) . DIRECTORY_SEPARATOR . 'config';

		return $new->getConfig(...$parameters);
	}
}

//设置允许加载目录 2021.12.08
set_include_path(TWOIR);
spl_autoload_register(['Loader', 'autoload']);

// 助手函数加载
require TWOIR . DIRECTORY_SEPARATOR . 'helper.php';

//启动自定义错误抛出
new Twoir\ErrorHandler;
